package com.atguigu.dw.gmall.realtime.util

import redis.clients.jedis.{Jedis, JedisPool, JedisPoolConfig}

/**
 * description ：redis工具类
 * author      ：剧情再美终是戏 
 * mail        : 13286520398@163.com
 * date        ：Created in 2020/2/11 18:22
 * modified By ：
 * version:    : 1.0
 */
object RedisUtil extends Serializable {

  // 获取 redis 相关参数
  private val propertiesUtil = PropertiesUtil("config.properties")
  private val host = propertiesUtil.getProperty("redis.host")
  private val port = propertiesUtil.getProperty("redis.port").toInt


  private val jedisPoolConfig = new JedisPoolConfig()
  jedisPoolConfig.setMaxTotal(200) //最大连接数
  jedisPoolConfig.setMaxIdle(150) //最大空闲
  jedisPoolConfig.setMinIdle(100) //最小空闲
  jedisPoolConfig.setBlockWhenExhausted(true) //忙碌时是否等待
  jedisPoolConfig.setMaxWaitMillis(1000 * 60) //忙碌时等待时长 毫秒 等待一分钟
  jedisPoolConfig.setTestOnBorrow(true) //每次获得连接的进行测试
  jedisPoolConfig.setTestOnReturn(true) // 每次放回连接池中都进行测试
  private val jedisPool: JedisPool = new JedisPool(jedisPoolConfig, host, port)

  // 直接得到一个 Redis 的连接
  def getJedisClient: Jedis = {
    jedisPool.getResource
  }

  // 直接得到一个 Redis 的连接（单个，不使用连接池）
  def getJedisClientSingle: Jedis = new Jedis(host, port)
}
